import sys, os, io
input = io.BytesIO(os.read(0, os.fstat(0).st_size)).readline
n = int(input())
ans = []
if n <= 5:
ans0 = "-1"
ans.append(ans0)
else:
ans.append("1 2")
for v in range(3, n + 1):
u = v % 2 + 1
ans.append(" ".join(map(str, (u, v))))
for u in range(1, n):
v = u + 1
ans.append(" ".join(map(str, (u, v))))
sys.stdout.write("\n".join(ans))
#include<bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
using namespace __gnu_pbds;
using namespace std;
#define cm ios_base::sync_with_stdio(0);cin.tie(0);
#define pb push_back
#define pp pop_back
#define pii pair<int,int>
#define pr_q(a) priority_queue<a,vector<a>,greater<a>>
#define int long long
#define vi vector<int>
#define ff first
#define ss second
#define rep(i,a,n) for(int i=a;i<n;i++)
typedef tree<int,null_type,less<int>,rb_tree_tag,
tree_order_statistics_node_update> indexed_set;
/**
indexed_set s;
s.insert(a);
auto x = s.find_by_order(2); cout<<*x;
cout<<s.order_of_key(7);
*/
int _last(){return 0;}
int _first(){return 0;}
template<typename T,typename... V>
int _last(T x,V... y){if(sizeof...(y))return max(x,_last(y...));else return x;}
template<typename T,typename... V>
int _first(T x,V... y){if(sizeof...(y))return min(x,_first(y...));else return x;}
void _mx(auto &x,auto... y){
int val = _last(y...);
x = (x>val?x:val);
}
void _mn(auto &x,auto... y){
int val = _first(y...);
x = (x<val?x:val);
}
const int mod = 1e9+7; /// 998244353
const int N = 1e6+5;
const int inf = 1e9;
const int ff[]={-1,0,1,0,-1};
void solve(){
int n;cin>>n;
if(n<=5){
cout<<"-1\n";
for(int i=2;i<=n;i++){
cout<<"1 "<<i<<'\n';
}
}else{
for(int i=2;i<=4;i++){
cout<<"1 "<<i<<"\n";
}
for(int i=5;i<=n;i++){
cout<<2<<' '<<i<<'\n';
}
for(int i=2;i<=n;i++){
cout<<"1 "<<i<<'\n';
}
}
}
signed main(){
chrono::steady_clock::time_point begin = chrono::steady_clock::now();
ios_base::sync_with_stdio(0);
cin.tie(0);
int t=1;
// cin>>t;
for(int i=1;i<=t;i++){
solve();
}
chrono::steady_clock::time_point end = chrono::steady_clock::now();
cerr<<"[Time Difference: "<<chrono::duration_cast<chrono::seconds>(end-begin).count()<<"[s]]" << endl;
cerr<<"[Time Difference: "<<chrono::duration_cast<chrono::milliseconds>(end-begin).count()<<"[ms]]" << endl;
}
1505H - L BREAK into program | 171E - MYSTERIOUS LANGUAGE |
630D - Hexagons | 1690D - Black and White Stripe |
1688D - The Enchanted Forest | 1674C - Infinite Replacement |
712A - Memory and Crow | 1676C - Most Similar Words |
1681A - Game with Cards | 151C - Win or Freeze |
1585A - Life of a Flower | 1662A - Organizing SWERC |
466C - Number of Ways | 1146A - Love "A" |
1618D - Array and Operations | 1255A - Changing Volume |
1710C - XOR Triangle | 415C - Mashmokh and Numbers |
8A - Train and Peter | 591A - Wizards' Duel |
1703G - Good Key Bad Key | 1705A - Mark the Photographer |
1707A - Doremy's IQ | 1706B - Making Towers |
1325B - CopyCopyCopyCopyCopy | 1649C - Weird Sum |
1324B - Yet Another Palindrome Problem | 525A - Vitaliy and Pie |
879A - Borya's Diagnosis | 1672B - I love AAAB |